const fs=require('fs/promises');

module.exports=async function({baseDir,packageJson,args,command},{copyReplace,copyCover,dateFormat}){
	const {platform='',theme=''}=args;
	if(command==='lib'){
		await fs.writeFile(
			'libs/components.js',
			[
				`import '../src/style/${platform}.scss';`,
				`export * from '../src/components/generate/${platform}/${theme}';`,
			].join('\r\n'),
		);
	}
	const buildTime=new Date();
	return {
		//(config) => devServerConfig  开发服务器, 参考webpack的配置
		devServer(config){
			return {
				client:{
					logging:'error',
				}
			}
		},
		//入口页面
		pages:{
			/*
			string			string  入口文件
						[key]:'src/main.js' 相当于
						{
							entry:'src/main.js',
							template:`template/${key}.html`,
							filename:`${key}.html`,
							favicon:'template/favicon.ico',
						}
			Object			参考html-webpack-plugin的参数
				entry		string  入口文件
				template	string  html模板, 默认为 template/index.html
				filename	string  html输出文件名, 默认为 index.html
				title		string  html标题, 默认为 package.json 的name字段
				favicon		string  标题图标, 默认为 空字符串
				minify		boolean | Object  是否压缩或压缩选项, 参考 html-minifier-terser
			 */
			index:'doc/main.js',
		},
		//string  outputDir所代表的: 绝对路径(包括URL), 相对路径, '//域名'(用于保持协议相同), 'auto'
		publicPath:'auto',
		//string  输出地址
		outputDir:'dist',
		//string | Array<string>  读取环境变量的位置, 可以从多个位置读取(叠加)
		envPath:'env',
		//别名, 以 baseDir 为基础
		alias:{
			'powerful-ui':'exports',
		},
		//打包信息文件
		buildFile:{
			//boolean  是否生成信息文件
			emit:command==='lib',
			//string  文件名
			name:'powerful/build-info.txt',
			//string | Array<string> | (config) => string|Array<string>  文件内容, 数组被换行拼接
			content(config){
				return [
					`仓库地址: ${packageJson.repository.url}`,
					'作者: 唐国雄',
					`构建时间: ${config.extraEnv.buildTime}`,
					`构建版本: ${config.extraEnv.version}`,
					`平台: ${config.extraEnv.platform}`,
					`主题: ${config.extraEnv.theme}`,
				];
			},
		},
		//额外的环境变量
		extraEnv:{
			packageName:packageJson.name,
			name:packageJson.description,
			version:packageJson.version,
			platform,
			theme,
			buildTime:dateFormat(buildTime,'yyyy-MM-dd HH:mm:ss.SSS ZZ'),
		},
		//替换标记
		definePlugin:{
			__VUE_OPTIONS_API__:'true',
			__VUE_PROD_DEVTOOLS__:'false',
		},
		//build命令下的配置
		buildConfig:{
			/*
			build信息输出格式
				'normal'	正常输出信息
				'raw'		webpack的原始信息
			 */
			buildConsole:'normal',
			//boolean  代码压缩
			minimize:true,
			//boolean  生成js的.map文件
			sourceMap:true,
			//boolean  生成css的.map文件
			cssSourceMap:false,
			//boolean  保留源码中的console语句
			sourceLog:true,
		},
		//lib命令下的配置
		libConfig:{
			/*
			lib信息输出格式
				'normal'	正常输出信息
				'raw'		webpack的原始信息
			 */
			buildConsole:'normal',
			//string  入口文件
			entry:'libs/template.js',
			//string  html模板, 默认为 template/index.html
			template:'template/lib.html',
			//boolean | Object  是否压缩或压缩选项, 参考 html-minifier-terser
			minify:true,
			//string  库名称
			name:'powerful',
			//boolean  是否压缩
			minimize:true,
			//boolean  生成js的.map文件
			sourceMap:true,
			//boolean  生成css的.map文件
			cssSourceMap:false,
			//boolean  保留源码中的console语句
			sourceLog:true,
			//外部依赖
			externals:{
				vue:{
					commonjs:'vue',
					commonjs2:'vue',
					amd:'vue',
					root:'Vue',
				},
			},
			//string | Array<string>  暴露的导出, 默认导出整个对象
			export:'default',
		},
		//静态资源拷贝
		copy:{
			//string  拷贝路径
			dir:'static',
			//boolean  是否压缩
			minimize:true,
		},
		//js转义配置
		babel:{
			//@babel/preset-env的选项
			presetOption:{
				//使用的browserslist环境
				browserslistEnv:undefined,
				//boolean  打印启用的 polyfills 和 transform plugins
				debug:false,
				/*
				如何处理 polyfill
					'usage'		自动导入用到的 polyfill
					'entry'		自己在入口处导入 polyfill, 程序根据目标环境剔除不必要的
				 */
				useBuiltIns:'usage',
			},
			//插件
			plugins:[],
			//Array<string>  必要依赖
			polyfills:[],
			//Array<string | RegExp>  需要转义的依赖
			transpileDependencies:[
				'@floating-ui',
			],
			//Array<string | RegExp>  额外的入口(需要注入polyfills的地方)
			extraEntry:[],
		},
		//typescript相关配置
		typescript:{
			//boolean  是否启用类型检查
			active:true,
		},
		//代码格式校验
		eslint:{
			//Array<string>  校验的文件类型
			extensions:[],
		},
		//分包配置
		cacheGroups:{
			src:{
				priority:9,
				test:/[\\/]src[\\/]/,
				name:'src',
				reuseExistingChunk:true,
				enforce:true
			},
		},
		//包分析报告配置
		report:{
			//boolean  是否生成报告文件
			emit:true,
			/*
			分析文件类型:
				'html'		html报告文件
				'json'		Webpack Stats JSON文件
			 */
			type:'html',
			//string  文件名
			filename:'report',
			//webpack的Stats配置
			statsOptions:null,
		},
		//参考filemanager-webpack-plugin
		fileManager:null,
		//webpack的配置
		webpackConfig:{
			performance:{
				hints:false,
			}
		}
	};
};
